﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using SmallERP.MODEL.FoundationModel;
using SmallERP.DAL;
using DevExpress.XtraGrid;
using System.Data;
using System.Data.OleDb;

namespace SmallERP.Bll.BaseInfo
{
    public class Subarea : IDBAccess
    {
        string dota = "' , '";
        /// <summary>
        /// 获得分区列表
        /// </summary>
        /// <returns></returns>
        public List<GridSubArea_Info> GetSubAreaList()
        {
            List<GridSubArea_Info> list = new List<GridSubArea_Info>();
            //using (smallerpDataContext entities = new smallerpDataContext())
            //{
            //    List<GridSubArea> listSubArea = entities.GridSubArea.ToList();
            //    foreach (var item in listSubArea)
            //    {
            //        GridSubArea_Info subAreaInfo = new GridSubArea_Info();
            //        subAreaInfo.HeightNum = item.heightNum;
            //        subAreaInfo.IsUseful = item.isUseful;
            //        subAreaInfo.NameHeadChar = item.nameHeadChar;
            //        subAreaInfo.OutTimeAlarmTime = item.OutTimeAlarmTime;
            //        subAreaInfo.SubAreaID = item.SubAreaID;
            //        subAreaInfo.SubAreaName = item.SubAreaName;
            //        subAreaInfo.WidthNum = item.widthNum;
            //        list.Add(subAreaInfo);
            //    }
            //}

            string QueryGrid = "select * from GridSubArea";
            DataTable qTable = DAL.AccessHelper.dataTable(QueryGrid);
            for (int i = 0; i < qTable.Rows.Count; i++)
            {
                GridSubArea_Info subAreaInfo = new GridSubArea_Info();
                subAreaInfo.HeightNum = Convert.ToInt32(qTable.Rows[i]["heightNum"]);
                subAreaInfo.IsUseful = Convert.ToBoolean(qTable.Rows[i]["isUseful"]);
                subAreaInfo.NameHeadChar = Convert.ToString(qTable.Rows[i]["nameHeadChar"]);
                subAreaInfo.OutTimeAlarmTime = Convert.ToInt32(qTable.Rows[i]["OutTimeAlarmTime"]);
                subAreaInfo.SubAreaID = Convert.ToInt32(qTable.Rows[i]["SubAreaID"]);
                subAreaInfo.SubAreaName = Convert.ToString(qTable.Rows[i]["SubAreaName"]);
                subAreaInfo.WidthNum = Convert.ToInt32(qTable.Rows[i]["widthNum"]);
                list.Add(subAreaInfo);

            }

            return list;
        }
        #region IDBAccess 成员

        public int Add(object o)
        {
            int ret = 0;
            GridSubArea_Info subAreaInfo = (GridSubArea_Info)o;
            //using (smallerpDataContext entities = new smallerpDataContext())
            //{
            //    try
            //    {
            //        GridSubArea aInDataBase = entities.GridSubArea.FirstOrDefault(p => p.SubAreaName == subAreaInfo.SubAreaName);
            //        if (aInDataBase != null)
            //        {
            //            ret = -2;
            //            return ret;
            //        }
            //        GridSubArea subArea = new GridSubArea();
            //        subArea.heightNum = subAreaInfo.HeightNum;
            //        subArea.isUseful = subAreaInfo.IsUseful;
            //        subArea.nameHeadChar = subAreaInfo.NameHeadChar;
            //        subArea.OutTimeAlarmTime = subAreaInfo.OutTimeAlarmTime;
            //        subArea.SubAreaName = subAreaInfo.SubAreaName;
            //        subArea.widthNum = subAreaInfo.WidthNum;
            //        for (int i = 1; i <= subAreaInfo.WidthNum * subAreaInfo.HeightNum; i++)
            //        {
            //            Grid grid = new Grid();
            //            grid.FirstEnterTime = new DateTime(2000, 1, 1);
            //            grid.GridName = subAreaInfo.NameHeadChar.ToUpper() + i.ToString();
            //            grid.OrderID = 0;
            //            grid.Status = 0;
            //            subArea.Grid.Add(grid);
            //        }
            //        entities.AddToGridSubArea(subArea);
            //        entities.SaveChanges();
            //    }
            //    catch
            //    {
            //        ret = -1;
            //    }
            //}
            string QueryGrid = "select * from GridSubArea where SubAreaName='" + subAreaInfo.SubAreaName+"'";
            DataTable qTable = DAL.AccessHelper.dataTable(QueryGrid);

            if (qTable.Rows.Count > 0)
            {
                ret = -2;
            }
            else
            {
                //DAL.AccessHelper.openConnection();
                OleDbConnection oleconn = AccessHelper.OpenMyConnection();
                OleDbTransaction tran = oleconn.BeginTransaction();
                
                string insertSql = "insert into GridSubArea (heightNum,isUseful,nameHeadChar,OutTimeAlarmTime,SubAreaName,widthNum) values"
                    + " (" + subAreaInfo.HeightNum + "," + Convert.ToInt32(subAreaInfo.IsUseful) + ",'" + subAreaInfo.NameHeadChar + "'," + subAreaInfo.OutTimeAlarmTime + ",'" + subAreaInfo.SubAreaName + "'," + subAreaInfo.WidthNum + ")";
                int rtnVal = DAL.AccessHelper.ExecuteNonQuery(insertSql,oleconn, tran);
                //int aaa=DAL.AccessHelper.ExecuteNonQuery(insertSql);
                if (rtnVal == 0)
                {
                    tran.Rollback();
                }
                else
                {


                    DataTable tableArea = DAL.AccessHelper.dataTable(QueryGrid,oleconn, tran);
                    int subAreasID = Convert.ToInt32(tableArea.Rows[0]["SubAreaID"]);
                    string NameHeadChar = Convert.ToString(tableArea.Rows[0]["NameHeadChar"]);
                    bool isSucess = true;
                    for (int i = 1; i <= subAreaInfo.WidthNum * subAreaInfo.HeightNum; i++)
                    {
                        //Grid grid = new Grid();
                        //grid.FirstEnterTime = new DateTime(2000, 1, 1);
                        //grid.GridName = subAreaInfo.NameHeadChar.ToUpper() + i.ToString();
                        //grid.OrderID = 0;
                        //grid.Status = 0;
                        //subArea.Grid.Add(grid);
                        string insertGgrid = "insert into Grid (SubAreaId,GridName,OrderID,FirstEnterTime,Status) values(" + subAreasID + ",'" + subAreaInfo.NameHeadChar.ToUpper() + i.ToString() + dota + 0 +dota+ DateTime.Now + dota + 0 + "')";
                        int rtninertVal = DAL.AccessHelper.ExecuteNonQuery(insertGgrid,oleconn, tran);
                        if (rtninertVal == 0)
                        {
                            isSucess = false;
                            break;
                        }
                    }
                    if (isSucess)
                    {
                        tran.Commit();
                        ret = 1;
                    }
                    else
                    {
                        tran.Rollback();
                    }
                    //DAL.AccessHelper.closeConnection();
                }
                AccessHelper.CloseMyConnection(oleconn);

            }
            return ret;
        }

        public int Update(object o)
        {
            int ret = 0;
            GridSubArea_Info subAreaInfo = (GridSubArea_Info)o;
            //using (smallerpDataContext entities = new smallerpDataContext())
            //{
            //    try
            //    {
            //        GridSubArea aInDataBase = entities.GridSubArea.FirstOrDefault(p => p.SubAreaName == subAreaInfo.SubAreaName);
            //        GridSubArea subArea = entities.GridSubArea.FirstOrDefault(p => p.SubAreaID == subAreaInfo.SubAreaID);
            //        if (aInDataBase != null&&subAreaInfo.SubAreaID !=subArea.SubAreaID)
            //        {
            //            ret = -2;
            //            return ret;
            //        }

            //        if (subArea.heightNum * subArea.widthNum > subAreaInfo.HeightNum * subAreaInfo.WidthNum)
            //        {

            //            for (int i = subArea.heightNum * subArea.widthNum; i > subAreaInfo.WidthNum * subAreaInfo.HeightNum; i--)
            //            {
            //                string gridName =subArea.nameHeadChar+i.ToString();
            //                Grid grid = entities.Grid.FirstOrDefault(g => g.GridName == gridName);
            //                entities.DeleteObject(grid);
            //            }
            //        }
            //        else if (subArea.heightNum * subArea.widthNum < subAreaInfo.HeightNum * subAreaInfo.WidthNum)
            //        {
            //            if (!subArea.Grid.IsLoaded)
            //            {
            //                subArea.Grid.Load();
            //            }
            //            for (int i = subArea.heightNum * subArea.widthNum+1; i <= subAreaInfo.WidthNum * subAreaInfo.HeightNum; i++)
            //            {
            //                Grid grid = new Grid();
            //                grid.FirstEnterTime = new DateTime(2000, 1, 1);
            //                grid.GridName = subAreaInfo.NameHeadChar.ToUpper() + i.ToString();
            //                grid.OrderID = 0;
            //                grid.Status = 0;
            //                subArea.Grid.Add(grid);
            //            }
            //        }
            //        subArea.heightNum = subAreaInfo.HeightNum;
            //        subArea.isUseful = subAreaInfo.IsUseful;
            //        subArea.nameHeadChar = subAreaInfo.NameHeadChar;
            //        subArea.OutTimeAlarmTime = subAreaInfo.OutTimeAlarmTime;
            //        subArea.SubAreaName = subAreaInfo.SubAreaName;
            //        subArea.widthNum = subAreaInfo.WidthNum;
            //        entities.SaveChanges();
            //    }
            //    catch
            //    {
            //        ret = -1;
            //    }
            //}
            OleDbConnection oleconn = AccessHelper.OpenMyConnection();
            OleDbTransaction tran = oleconn.BeginTransaction();
            
            bool isSucess = true;
            string QueryGrid = "select * from GridSubArea where SubAreaName='" + subAreaInfo.SubAreaName+"'";
            DataTable qTable = DAL.AccessHelper.dataTable(QueryGrid,oleconn, tran);

            if (qTable.Rows.Count == 0)
            {
                ret = -2;
            }
            else
            {
                int subAreasID = Convert.ToInt32(qTable.Rows[0]["SubAreaID"]);
                string NameHeadChar = Convert.ToString(qTable.Rows[0]["NameHeadChar"]);
                int oldWidthNum = Convert.ToInt32(qTable.Rows[0]["WidthNum"]);
                int oldHeightNum = Convert.ToInt32(qTable.Rows[0]["HeightNum"]);
                if (subAreaInfo.HeightNum * subAreaInfo.WidthNum > oldHeightNum * oldWidthNum)//添加新的格子信息
                {
                    if (NameHeadChar != subAreaInfo.NameHeadChar)//head变了
                    {
                        for (int i = 0; i < oldHeightNum * oldWidthNum; i++)
                        {
                            string updateGridHead = "update grid set GridName ='" + subAreaInfo.NameHeadChar.ToUpper() + i.ToString() + "' where GridName='" + NameHeadChar.ToUpper() + i.ToString()+"'";
                            int rtnVal = DAL.AccessHelper.ExecuteNonQuery(updateGridHead,oleconn, tran);
                            if (rtnVal == 0)
                            {
                                isSucess = false;
                                break;
                            }
                        }
                    }
                    for (int i = oldHeightNum * oldWidthNum; i <= subAreaInfo.HeightNum * subAreaInfo.WidthNum; i++)
                    {
                        string insertGrid = "insert into Grid (SubAreaId,GridName,OrderID,FirstEnterTime,Status) values('" + subAreasID + dota + subAreaInfo.NameHeadChar.ToUpper() + i.ToString() + dota + 0+dota + DateTime.Now + dota + 0 + "')";
                        int rtninertVal = DAL.AccessHelper.ExecuteNonQuery(insertGrid,oleconn, tran);
                        if (rtninertVal == 0)
                        {
                            isSucess = false;
                            break;
                        }

                    }


                }
                else if (subAreaInfo.HeightNum * subAreaInfo.WidthNum < oldHeightNum * oldWidthNum)
                {
                    for (int i = subAreaInfo.HeightNum * subAreaInfo.WidthNum; i <= subAreaInfo.HeightNum * subAreaInfo.WidthNum; i++)
                    {
                        string gridName = subAreaInfo.NameHeadChar + i.ToString();
                        string insertGrid = "delete from grid where gridname ='" + gridName + "'";
                        int rtninertVal = DAL.AccessHelper.ExecuteNonQuery(insertGrid,oleconn, tran);

                    }
                    if (NameHeadChar != subAreaInfo.NameHeadChar)//head变了
                    {
                        for (int i = 0; i < subAreaInfo.HeightNum * subAreaInfo.WidthNum; i++)
                        {
                            string updateGridHead = "update grid set GridName ='" + subAreaInfo.NameHeadChar.ToUpper() + i.ToString() + "' where GridName='" + NameHeadChar.ToUpper() + i.ToString()+"'";
                            int rtnVal = DAL.AccessHelper.ExecuteNonQuery(updateGridHead,oleconn, tran);
                            if (rtnVal == 0)
                            {
                                isSucess = false;
                                break;
                            }
                        }
                    }
                }
                else
                {
                    if (NameHeadChar != subAreaInfo.NameHeadChar)//head变了
                    {
                        for (int i = 0; i < oldHeightNum * oldWidthNum; i++)
                        {
                            string updateGridHead = "update grid set GridName ='" + subAreaInfo.NameHeadChar.ToUpper() + i.ToString() + "'where GridName='" + NameHeadChar.ToUpper() + i.ToString()+"'";
                            int rtnVal = DAL.AccessHelper.ExecuteNonQuery(updateGridHead, oleconn,tran);
                            if (rtnVal == 0)
                            {
                                isSucess = false;
                                break;
                            }
                        }
                    }
                }
                string UpdateSubAreas = "update GridSubArea set heightNum='" + subAreaInfo.HeightNum + "'," + " SubAreaName='" + subAreaInfo.SubAreaName + "'," + " isUseful=" + Convert.ToInt32(subAreaInfo.IsUseful) + ", widthNum='" + subAreaInfo.WidthNum + "',  nameHeadChar='" + subAreaInfo.NameHeadChar + "'," + " OutTimeAlarmTime= '" + subAreaInfo.OutTimeAlarmTime+"'" + " where SubAreaName='" + subAreaInfo.SubAreaName+"'";
                int upRtn = DAL.AccessHelper.ExecuteNonQuery(UpdateSubAreas,oleconn, tran);
                if (upRtn == 0)
                {
                    isSucess = false;
                }
                if (isSucess)
                {
                    tran.Commit();
                }
                else
                {
                    tran.Rollback();
                }

            }
            AccessHelper.CloseMyConnection(oleconn);

            return ret;
        }

        public int Delete(object o)
        {
            int ret = 0;
           
             OleDbConnection oleconn = AccessHelper.OpenMyConnection();
            try
            {
               
                OleDbTransaction tran = oleconn.BeginTransaction();
                GridSubArea_Info subAreaInfo = (GridSubArea_Info)o;
                //using (smallerpDataContext entities = new smallerpDataContext())
                //{
                //    try
                //    {

                //        GridSubArea subArea = entities.GridSubArea.FirstOrDefault(p => p.SubAreaName == subAreaInfo.SubAreaName);

                //        entities.DeleteObject(subArea);
                //        entities.SaveChanges();
                //    }
                //    catch
                //    {
                //        ret = -1;
                //    }
                //}
                //tran.Begin();
                string delGridSql = "delete from grid where SubAreaID=" + subAreaInfo.SubAreaID;
                string delSubAreasSql = "delete from GridSubArea where SubAreaID=" + subAreaInfo.SubAreaID + "";
                int delGridInt = DAL.AccessHelper.ExecuteNonQuery(delGridSql,oleconn, tran);
                int delSubAreasInt = DAL.AccessHelper.ExecuteNonQuery(delSubAreasSql,oleconn, tran);
                tran.Commit();
                
            }
            catch
            { }
            finally
            {
                AccessHelper.CloseMyConnection(oleconn);
            }
            return 1;
        }

        public int LinkGridControl(object o)
        {
            int ret = 0;
            try
            {
                ((GridControl)o).DataSource = GetSubAreaList();
                ((GridControl)o).RefreshDataSource();
            }
            catch
            {
                ret = -1;
            }
            return ret;
        }

        #endregion
    }
}
